﻿using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc;

namespace Basic.Controllers;

[Produces("application/json")]
public class DataAnnotationsController : Controller
{
    [HttpPost("payments/authorize")]
    [ProducesResponseType(200, Type = typeof(string))]
    public IActionResult AuthorizePayment([FromBody, Required]PaymentRequest request)
    {
        if (!ModelState.IsValid)
            return new BadRequestObjectResult(ModelState);

        return new ObjectResult("123456");
    }

    [HttpPut("payments/{paymentId}/cancel")]
    public IActionResult CancelPayment([MinLength(6)]string paymentId)
    {
        return Ok();
    }
}

public class PaymentRequest
{
    [Required]
    public Transaction Transaction { get; set; }

    [Required]
    public CreditCard CreditCard { get; set; }
}

public class Transaction
{
    [Required]
    public decimal Amount { get; set; }

    public string Note { get; set; }
}

public class CreditCard
{
    [Required, RegularExpression("^[3-6]?\\d{12,15}$")]
    public string CardNumber { get; set; }

    [Required, Range(1, 12)]
    public int ExpMonth { get; set; }

    [Required, Range(14, 99)]
    public int ExpYear { get; set; }
}
